"""
Supabase 数据库连接和配置
"""

import os
from pathlib import Path
from supabase import create_client, Client
from typing import Optional
import asyncio
import logging

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 尝试加载.env文件
def load_env_file():
    env_file = Path(__file__).parent.parent / ".env"
    if env_file.exists():
        with open(env_file, 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if line and not line.startswith('#') and '=' in line:
                    key, value = line.split('=', 1)
                    os.environ[key.strip()] = value.strip()

# 加载环境变量
load_env_file()

# Supabase配置
SUPABASE_URL = os.getenv("SUPABASE_URL", "")
SUPABASE_KEY = os.getenv("SUPABASE_ANON_KEY", "")  # 公开的匿名密钥，用于无认证访问

# 全局Supabase客户端实例
_supabase_client: Optional[Client] = None

def get_supabase_client() -> Client:
    """获取Supabase客户端实例（单例模式）"""
    global _supabase_client
    
    if _supabase_client is None:
        if not SUPABASE_URL or not SUPABASE_KEY:
            raise ValueError(
                "Supabase配置缺失！请设置环境变量：\n"
                "- SUPABASE_URL: 你的Supabase项目URL\n"
                "- SUPABASE_ANON_KEY: 你的Supabase匿名密钥"
            )
        
        _supabase_client = create_client(SUPABASE_URL, SUPABASE_KEY)
        logger.info("Supabase客户端初始化成功")
    
    return _supabase_client

def test_connection() -> bool:
    """测试Supabase数据库连接"""
    try:
        supabase = get_supabase_client()
        # 简单查询测试连接
        result = supabase.table("sessions").select("id").limit(1).execute()
        logger.info("Supabase数据库连接测试成功")
        return True
    except Exception as e:
        logger.error(f"Supabase数据库连接测试失败: {e}")
        return False

async def init_database():
    """初始化数据库（执行建表脚本等）"""
    try:
        supabase = get_supabase_client()
        
        # 读取并执行初始化SQL脚本
        sql_file_path = os.path.join(os.path.dirname(__file__), "init.sql")
        
        if os.path.exists(sql_file_path):
            with open(sql_file_path, 'r', encoding='utf-8') as f:
                sql_content = f.read()
            
            # 注意：Supabase Python SDK不直接支持执行复杂SQL
            # 初始化脚本需要在Supabase Dashboard的SQL编辑器中手动执行
            logger.warning("请在Supabase Dashboard的SQL编辑器中手动执行init.sql文件")
            return True
        else:
            logger.warning("未找到init.sql文件，跳过数据库初始化")
            return False
            
    except Exception as e:
        logger.error(f"数据库初始化失败: {e}")
        return False

# 配置检查函数
def check_supabase_config():
    """检查Supabase配置是否完整"""
    config_status = {
        "SUPABASE_URL": bool(SUPABASE_URL),
        "SUPABASE_ANON_KEY": bool(SUPABASE_KEY)
    }
    
    missing_configs = [key for key, value in config_status.items() if not value]
    
    if missing_configs:
        logger.error(f"缺少Supabase配置: {missing_configs}")
        print("\n请按照以下步骤配置Supabase：")
        print("1. 访问 https://supabase.com 创建项目")
        print("2. 在项目设置中找到 API URL 和 anon public key")
        print("3. 设置环境变量：")
        print(f"   set SUPABASE_URL=你的项目URL")
        print(f"   set SUPABASE_ANON_KEY=你的匿名密钥")
        print("4. 在SQL编辑器中执行 backend/database/init.sql")
        return False
    
    logger.info("Supabase配置检查通过")
    return True

if __name__ == "__main__":
    # 用于测试配置和连接
    print("正在检查Supabase配置...")
    if check_supabase_config():
        print("正在测试数据库连接...")
        if test_connection():
            print("✅ Supabase配置和连接正常！")
        else:
            print("❌ 数据库连接失败，请检查配置")
    else:
        print("❌ Supabase配置不完整")